﻿/*
 * Created by SharpDevelop.
 * User: CeCi
 * Date: 14/04/2014
 * Time: 07:32 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Data;
using System.Collections.Generic;
using Gestión_UTN.factories;

namespace Gestión_UTN.blimpl
{
	/// <summary>
	/// Description of regularidadblimpl.
	/// </summary>
	public class regularidadblimpl:bl.regularidadbl
	{
		private static da.regularidadda createRegularidad = dafactory.createRegularidad();
		private static bl.alumnobl createAlumno = blfactory.createAlumno();
		private static bl.materiabl createMateria = blfactory.createMateria();
		private static bl.cursadabl createCursada = blfactory.createCursada();
		
		public regularidadblimpl()
		{
		}
		
		public bool SaveRegularidad(Gestión_UTN.bo.Regularidadbo reg)
		{
			bool ingresada = false;
			
			try 
			{
				ingresada = (null != reg)
					? createRegularidad.SaveRegularidad(reg.Alumno.Dni,reg.Materia.Id,
					                                    reg.Cursada.Id,reg.Fecha)
					: false;
			} 
			catch (Exception) 
			{
				
				ingresada = false;
			}
			
			return ingresada;
		}
		
		public bool DeleteRegularidad(Gestión_UTN.bo.Regularidadbo reg)
		{
			bool eliminada = false;
			
			try 
			{
				eliminada = (null != reg)
					? createRegularidad.DeleteRegularidad(reg.Alumno.Dni,
					                                      reg.Materia.Id,reg.Fecha)
					: false;
				
			} catch (Exception) {
				
				eliminada = false;
			}
			
			return eliminada;
		}
		
		public bool ModifyRegularidad(Gestión_UTN.bo.Regularidadbo reg, Gestión_UTN.bo.Regularidadbo reg_anterior)
		{
			bool modificada = false;
			
			try 
			{
				modificada = (null != reg && null != reg_anterior)
					? createRegularidad.ModifyRegularidad(reg_anterior.Alumno.Dni, reg_anterior.Materia.Id,
					                                      reg_anterior.Fecha,reg.Alumno.Dni,reg.Materia.Id,
					                                      reg.Cursada.Id,reg.Fecha)
					:false;
			} 
			catch (Exception) 
			{
				
				modificada = false;
			}
			
			return modificada;
		}
		
		public DataTable FindAllRegularidades()
		{
			DataTable tablaRegularidades = null;
			
			try 
			{
				tablaRegularidades = createRegularidad.FindAllRegularidades();
			}
			catch (Exception) 
			{
				tablaRegularidades = null;
			}
			
			return tablaRegularidades;
		}
		
		public List<Gestión_UTN.bo.Regularidadbo> FindRegularidadByDni(int alu_dni)
		{
			List<bo.Regularidadbo> regularidades = null;
			
			try 
			{
				List<Entities.Regularidad> regs = (0 != alu_dni)
					? createRegularidad.FindRegularidadByDni(alu_dni)
					: null;
				
				if (null != regs) 
				{
					regularidades = new List<bo.Regularidadbo>();
					
					foreach (var r in regs) 
					{
						bo.Alumnobo alu = createAlumno.FindAlumnoByDNI(r.Alu_dni);
						bo.Materiabo mat = createMateria.FindMateriaByMatId(r.Mat_id);
						bo.Cursadabo cur = createCursada.FindCursadasById(r.Cur_id);
						
						bo.Regularidadbo reg = new bo.Regularidadbo(alu,mat,cur,
						                                            r.Fecha);
						
						regularidades.Add(reg);
						
						reg = null;
					}
				}
			} 
			catch (Exception)
			{
				regularidades = null;
			}
			
			return regularidades;
		}
		
		public List<Gestión_UTN.bo.Regularidadbo> FindRegularidadByMateria(int mat_id, int cur_id)
		{
			List<bo.Regularidadbo> regularidades = null;
			
			try 
			{
				List<Entities.Regularidad> regs = (0 != mat_id && 0 != cur_id)
					? createRegularidad.FindRegularidadByMateria(mat_id,cur_id)
					: null;
				
				if (null != regs) 
				{
					regularidades = new List<bo.Regularidadbo>();
					
					foreach (var r in regs) 
					{
						bo.Alumnobo alu = createAlumno.FindAlumnoByDNI(r.Alu_dni);
						bo.Materiabo mat = createMateria.FindMateriaByMatId(r.Mat_id);
						bo.Cursadabo cur = createCursada.FindCursadasById(r.Cur_id);
						
						bo.Regularidadbo reg = new bo.Regularidadbo(alu,mat,cur,
						                                            r.Fecha);
						
						regularidades.Add(reg);
						
						reg = null;
					}
				}
			} 
			catch (Exception)
			{
				regularidades = null;
			}
			
			return regularidades;
		}
	}
}
